package zgh.structure.agent.jdkproxy;

import zgh.structure.agent.staticproxy.TV;

/**
 * @author zhanggonghui
 * @create 2022-04-17 14:32
 * @describe
 * 代理对象不需要实现接口，但是目标对象一定要实现接口，否则不能用动态代理。
 * 动态代理的方式中，所有的函数调用最终都会经过 invoke 函数的转发，因此我们就可以在这里做一些自己想做的操作，比如日志系统、事务、拦截器、权限控制等。
 *
 * JDK 动态代理有一个最致命的问题是它只能代理实现了某个接口的实现类，并且代理类也只能代理接口中实现的方法，要是实现类中有自己私有的方法，而接口中没有的话，该方法不能进行代理调用。
 **/
public class TVConsumer {

    public static void main(String[] args) {
        TVCompany target = new TVFactory();
        TVCompany tvCompany = (TVCompany) new TVProxyFactory(target).getProxy();
        TV tv = tvCompany.produceTV();
        tvCompany.repair(tv);
    }

}
